package com.slb.slnwp.common.utils;

import org.apache.commons.lang3.StringUtils;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * @author: joinly
 * @date: 2021/11/26 15:39
 * @desc:
 **/
public class UnicodeToCN {

    /**
     * 将包含Unicode编码的字符串转换为中文字符串的工具方法
     * @param unicodeStr 待转化的编码
     * @return 返回转化后的汉子
     */
    public static String toCN(String unicodeStr) {
        // 如果输入字符串为空或只包含空白字符，则直接返回
        if (StringUtils.isBlank(unicodeStr)) {
            return unicodeStr;
        }
        try {
            // 使用正则表达式匹配Unicode编码
            Pattern pattern = Pattern.compile("(\\\\u(\\p{XDigit}{4}))");
            Matcher matcher = pattern.matcher(unicodeStr);
            char ch;
            // 循环查找匹配的Unicode编码并替换为对应的字符
            while (matcher.find()) {
                String group = matcher.group(2);
                // 将十六进制表示的Unicode编码转换为对应的字符
                ch = (char) Integer.parseInt(group, 16);
                String group1 = matcher.group(1);
                unicodeStr = unicodeStr.replace(group1, ch + "");
            }
            // 移除反斜杠，并去除字符串两端的空白字符
            return unicodeStr.replace("\\", "").trim();
        } catch (Exception e) {

        }
        return unicodeStr;
    }

    /**
     * 将十六进制字符串转换为字节数组
     * @param hexString
     * @return
     */
    public static byte[] hexStringToByteArray(String hexString) {
        int length = hexString.length();
        // 创建字节数组，长度为输入字符串长度的一半
        byte[] byteArray = new byte[length / 2];
        // 循环遍历十六进制字符串，每次处理两个字符
        for (int i = 0; i < length; i += 2) {
            // 将两个十六进制字符转换为对应的整数值
            byteArray[i / 2] = (byte) ((Character.digit(hexString.charAt(i), 16) << 4)
                    + Character.digit(hexString.charAt(i + 1), 16));
        }
        return byteArray;
    }
}
